package imnu.reflect;

import java.lang.reflect.Method;

/**
 * @author: lys
 * @类名: Test02
 * @Title:
 * @date: 2020/7/23
 **/
public class Test02 {
    public static void main(String[] args) {
        test01();
        System.out.println("****************************");
        test02();
        System.out.println("****************************");
    }

    public static void test02() {
        Class type1 = Student.class;
        try {
            //获取指定方法对象，通过方法名和参数类型进行指定
            Method md = type1.getDeclaredMethod("sayHi");
            Method md1 = type1.getDeclaredMethod("sayBye", String.class);
            //使用类文件对象创建实例
            Student stu = (Student) type1.newInstance();
            System.out.println("调用SayHi");
            //调用方法
            md.invoke(stu);
            System.out.println("调用sayBye");
            md1.invoke(stu,"张三");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void test01() {
        Class type1 = Student.class;
        //获取类文件下的所有方法，不收访问控制修饰符的限制
        Method[] m = type1.getDeclaredMethods();
        for (Method mm:m){
            System.out.println(mm.getName());
        }
    }

}
